//package com.game.curator;
//
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import java.io.File;
//
//import com.game.cluster.MarsNodeListener;
//import com.game.config.NodeConfig;
//import com.game.config.ZookeeperConfig;
//import com.game.monitor.FileLoader;
//import com.game.monitor.FileMonitor;
//import org.alan.utils.FileHelper;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.CommandLineRunner;
//import org.springframework.core.annotation.Order;
//import org.springframework.stereotype.Component;
//
//@Component
//@Order(3)
//public class NodeManager implements CommandLineRunner, MarsCuratorListener, MarsNodeListener, FileLoader {
//    Logger log = LoggerFactory.getLogger(getClass());
//
//    @Autowired
//    public NodeConfig nodeConfig;
//
//    @Autowired
//    private MarsCurator marsCurator;
//
//    @Autowired
//    private ZookeeperConfig zkConfig;
//
//    public String nodePath;
//
//    public String configFile = "config/nodeConfig.json";
//
//    @Autowired
//    public FileMonitor fileMonitor;
//
//    @Autowired
//    public MicServiceManager micServiceManager;
//
//    public void marsCuratorRefreshed(MarsCurator marsCurator) {
//        register();
//    }
//
//    public void run(String... strings) throws Exception {
//        obConfig();
//    }
//
//    public void obConfig() {
//        this.fileMonitor.addFileObserver(this.configFile, this, true);
//    }
//
//    public void load(File file, boolean isNew) {
//        try {
//            this.log.info("on file change filename = {}{}", file.getName(), Boolean.valueOf(isNew));
//            readConfig(file);
//        } catch (Exception e) {
//            e.printStackTrace();
//            this.log.warn("on file change err,filename = " + file.getName() + "+ isNew, e);
//        }
//    }
//
//    public void readConfig(File file) {
//        String content = FileHelper.readFile(file, "UTF-8");
//        JSONObject jsonObject = JSON.parseObject(content);
//        if (jsonObject.containsKey("weight")) {
//            int weight = jsonObject.getIntValue("weight");
//            this.nodeConfig.setWeight(weight);
//        }
//        if (jsonObject.containsKey("whiteIpList")) {
//            JSONArray whiteIpArray = jsonObject.getJSONArray("whiteIpList");
//            if (whiteIpArray != null)
//                this.nodeConfig.setWhiteIpList((String[])whiteIpArray.toArray((Object[])new String[0]));
//        }
//        if (jsonObject.containsKey("whiteIdList")) {
//            JSONArray whiteIdArray = jsonObject.getJSONArray("whiteIdList");
//            if (whiteIdArray != null)
//                this.nodeConfig.setWhiteIdList(ArrayUtils.toPrimitive((Integer[])whiteIdArray.toArray((Object[])new Integer[0])));
//        }
//        update();
//    }
//
//    private void register() {
//        try {
//            StringBuilder sb = new StringBuilder("/");
//            sb.append(this.nodeConfig.getParentPath()).append("/")
//                    .append(this.nodeConfig.getType()).append("/")
//                    .append(this.nodeConfig.getName());
//            String path = sb.toString();
//            this.log.info("node register,path is {}", path);
//            if (this.nodeConfig.showMicservice) {
//                this.nodeConfig.setMicserviceMessageTypes(this.micServiceManager.messageTypes);
//            } else {
//                this.nodeConfig.setMicserviceMessageTypes(null);
//            }
//            String nc = JSON.toJSONString(this.nodeConfig, true);
//            this.nodePath = this.marsCurator.addPath(path, nc.getBytes("UTF-8"), false);
//            this.marsCurator.addMarsNodeListener(path, this);
//        } catch (Exception e) {
//            this.log.warn("node register fail.", e);
//        }
//    }
//
//    public void update() {
//        try {
//            StringBuilder sb = new StringBuilder("/");
//            sb.append(this.nodeConfig.getParentPath()).append("/")
//                    .append(this.nodeConfig.getType()).append("/")
//                    .append(this.nodeConfig.getName());
//            String path = sb.toString();
//            this.log.info("node update,path is {}", path);
//            if (this.nodeConfig.showMicservice) {
//                this.nodeConfig.setMicserviceMessageTypes(this.micServiceManager.messageTypes);
//            } else {
//                this.nodeConfig.setMicserviceMessageTypes(null);
//            }
//            String nc = JSON.toJSONString(this.nodeConfig, true);
//            this.nodePath = this.marsCurator.updatePath(path, nc.getBytes("UTF-8"), false);
//        } catch (Exception e) {
//            this.log.warn("node update fail.", e);
//        }
//    }
//
//    public MarsNode getMarNode(NodeType nodeType) {
//        String nodePath = "/" + this.zkConfig.getMarsRoot() + "/" + this.nodeConfig.getParentPath() + "/" + nodeType;
//        return this.marsCurator.getMarsNode(nodePath);
//    }
//
//    public MarsNode getMarNode(String nodeType) {
//        String nodePath = "/" + this.zkConfig.getMarsRoot() + "/" + this.nodeConfig.getParentPath() + "/" + nodeType;
//        return this.marsCurator.getMarsNode(nodePath);
//    }
//
//    public String getMarNodePath(String nodeType, String nodeName) {
//        return "/" + this.zkConfig.getMarsRoot() + "/" + this.nodeConfig.getParentPath() + "/" + nodeType + "/" + nodeName;
//    }
//
//    public void nodeChange(MarsNodeListener.NodeChangeType nodeChangeType, MarsNode marsNode) {
//        switch (nodeChangeType) {
//            case NODE_REMOVE:
//                this.log.warn(");
//                        register();
//                break;
//        }
//    }
//}
//
